@@ -1,5 +1,3 @@ |
||
1 |
-require 'open3' |
|
2 |
- |
|
3 | 1 |
module Agents |
4 | 2 |
class ShellCommandAgent < Agent |
5 | 3 |
default_schedule "never" |
@@ -88,23 +86,25 @@ module Agents |
||
88 | 86 |
end |
89 | 87 |
|
90 | 88 |
def run_command(path, command) |
91 |
- result = nil |
|
92 |
- errors = nil |
|
93 |
- exit_status = nil |
|
94 |
- |
|
95 |
- Dir.chdir(path){ |
|
96 |
- begin |
|
97 |
- stdin, stdout, stderr, wait_thr = Open3.popen3(command) |
|
98 |
- exit_status = wait_thr.value.to_i |
|
99 |
- result = stdout.gets(nil) |
|
100 |
- errors = stderr.gets(nil) |
|
101 |
- rescue Exception => e |
|
102 |
- errors = e.to_s |
|
103 |
- end |
|
104 |
- } |
|
89 |
+ begin |
|
90 |
+ rout, wout = IO.pipe |
|
91 |
+ rerr, werr = IO.pipe |
|
92 |
+ |
|
93 |
+ pid = spawn(command, chdir: path, out: wout, err: werr) |
|
105 | 94 |
|
106 |
- result = result.to_s.strip |
|
107 |
- errors = errors.to_s.strip |
|
95 |
+ wout.close |
|
96 |
+ werr.close |
|
97 |
+ |
|
98 |
+ (result = rout.read).strip! |
|
99 |
+ (errors = rerr.read).strip! |
|
100 |
+ |
|
101 |
+ _, status = Process.wait2(pid) |
|
102 |
+ exit_status = status.exitstatus |
|
103 |
+ rescue Exception => e |
|
104 |
+ errors = e.to_s |
|
105 |
+ result = ''.freeze |
|
106 |
+ exit_status = nil |
|
107 |
+ end |
|
108 | 108 |
|
109 | 109 |
[result, errors, exit_status] |
110 | 110 |
end |